One approach taken in improving the tools that aid in the design of electronic systems is to provide the designer with the ability to specify parts of the design in a high-level language (HLL). An HLL is a programming language, for example, C, C++, or Java, and with the HLL the designer can specify functionality at a high level of abstraction. A tool, such as the Forge compiler from Xilinx, translates an HLL-specified function to a specification in a hardware description language (HDL). The HDL specification can then be processed using synthesis and place-and-route tools.
In some applications it may be desired to compile only a portion of an HLL program into an HDL specification, leaving the remaining HLL specification to execute on a processor coupled to the compiled portion. This may be done for purposes of accelerating performance of that function of the program. In order to implement in hardware a particular function within an HLL program, the HDL specification of that function must have an interface that is consistent with the input and output requirements, including parameters and state variables, of the HLL function. At least two different approaches may be used to generate the HDL specification of the interface.
In one approach, the designer includes in the HLL source code, specific constructs for implementing the interface. In another approach, compiler-specific libraries are linked into the application source, and the library routines facilitate data movement into and out of the function. Both approaches impose certain restrictions on the designer.
In using interface-specific constructs in an HLL the source code becomes non-standard, which makes establishing a suitable test environment more difficult. Use of the interface-specific constructs may require a customized, proprietary compiler for both hardware generation as well as algorithm verification, testing, and debugging. This may limit the designer's options in selecting development tools.
When compiler-specific libraries are used in an HLL to specify an interface, test data may be required to be applied to the design, test results captured, and test results validated, all via the linked library elements. Thus, both the interface-specific constructs and special library elements complicate the design process by imposing further restrictions on the designer.
The present invention may address one or more of the above issues.